/*
 * @Author: yangrongxin
 * @Date: 2021-08-02 16:05:10
 * @LastEditors: guoju
 * @LastEditTime: 2022-01-07 11:26:42
 */
import Taro from '@tarojs/taro';
import { getAuthWithCode, getAuthWithUserPhone, getAuthWithUserPhoneAndCode } from '@/services/login';
import { setItemSync } from '@/utils/storage';
import { STORAGE_TYPE } from '@/const/dataDictionary';

export default {
  namespace: 'global',
  state: {
    isLogin: false, // 判断当前用户是否正常登录(正常获取到token)
    isWhitePage: false, // 当前用户是否是白名单
    isAudit: false, // 当前用户是否是审核状态
  },
  effects: {
    /*
     * 登录流程诠释 在登录的时候首先获取 code -> 获取到登录信息完成登录
     * code未获取到登录数据 -> 跳转获取手机号码鉴权的页面 通过手机号码获取鉴权信息完成登录
     * 手机号码未获取到登录信息 -> 跳转身份证号码绑定身份证获取鉴权信息
     */
    // 使用code进行登录
    *loginWithCode(params: never, { call, put }) {
      const { code } = yield Taro.login();
      const userData = yield call(getAuthWithCode, {
        code,
        loginDeviceNum: `${new Date().getTime()}`,
        loginDeviceType: 'WX_APP',
        weChatRequestType: 'MINI_PROGRAM',
      });
      // teamMainUser 1 是团长 2 不是团长
      const { phone, idCard, userInfo, teamMainUser } = userData || {};
      console.log('userData', userData);
      if (!phone && !idCard && !userInfo) {
        Taro.redirectTo({
          url: '/pages/Login/index',
        });
        return;
      }
      if (phone && !idCard && !userInfo) {
        Taro.redirectTo({
          url: `/pages/My/compoents/MyData/index?isRegister=true&phone=${phone}`,
        });
        return;
      }
      if (phone && idCard && userInfo) {
        console.log('登录成功!');
        setItemSync(STORAGE_TYPE.USERINFO, userInfo);
        setItemSync(STORAGE_TYPE.TEAMMAINUSER, teamMainUser);
        setItemSync(STORAGE_TYPE.ISLOGIN, 1);
        yield put({
          type: 'updateStatus',
          payload: {
            isLogin: true,
          },
        });
        Taro.reLaunch({
          url: '/pages/Home/index',
        });
      }
    },
    // 根据手机号码获取当前的登录信息
    *loginWithUserPhone({ payload, callback }, { call, put }) {
      // const { code } = yield Taro.login();
      // 游客流程中 需要调用新的接口
      const userData = yield call(getAuthWithUserPhoneAndCode, { ...payload });
      const { phone, idCard, userInfo, teamMainUser } = userData;
      callback && callback();
      if (phone && !idCard) {
        Taro.redirectTo({
          url: `/pages/My/compoents/MyData/index?isRegister=true&phone=${phone}`,
        });
        return;
      }
      if (phone && idCard && userInfo) {
        setItemSync(STORAGE_TYPE.USERINFO, userInfo); // 设置当前用户的用户信息
        setItemSync(STORAGE_TYPE.TEAMMAINUSER, teamMainUser); // 设置当前用户是不是团队管理员
        setItemSync(STORAGE_TYPE.ISLOGIN, 1); // 设置当前用户是否已经登录
        yield put({
          type: 'updateStatus',
          payload: {
            isLogin: true,
          },
        });
        Taro.reLaunch({
          url: '/pages/Home/index',
        });
      }
      console.log('userData', userData);
    },
  },
  reducers: {
    updateState(state, { payload }) {
      return {
        ...state,
        ...payload,
      };
    },
  },
};
